Electronic computers configured to communicate over a packet routing network have routable network addresses. In order for a local computer to send data to a remote computer, the local computer must have the remote routable address of the remote computer prior to sending data to the remote computer. Likewise, in order for the remote computer to send data to the local computer, the remote computer must have the local routable address of the local computer. Typically, the local computer includes its local routable address in the data sent to, and received by, the remote computer. Thus, the remote computer is able to obtain the local routable address directly from the local computer. However, as the local computer is usually the first computer to send data, it has no way to obtain the remote routable address directly from the remote computer. Accordingly, the local computer must receive the remote routable address, or information that can be used to resolve the remote routable address from a resolution system (such as the Domain Name System (“DNS”)), of the remote computer from a source other than the remote computer. This is usually accomplished manually, via a user input, or programmatically, via software or a hardcoded instruction set. Once the local and remote computers have obtained the remote routable address and the local routable address, respectively, they may form a network connection.
The local computer may, at the request of a requesting application in communication with the operating system of the local computer, initiate a connection to the remote computer. Once established, the requesting application may exchange data with the remote computer as long as the connection remains open. However, should the local or remote routable address change while the connection is open, the connection will close whether or not the requesting application has finished exchanging data with the remote computer. In the case where the remote routable address changes, the source that supplied the remote routable address, or the information used to resolve the remote routable address, to the local computer may not have the new remote routable address, or the new information needed to resolve the remote routable address, of the remote computer. Likewise, the resolution system, if one was used, may also not have the new remote routable address of the local computer.
Similar problems arise when the local and/or remote computers are connected to a private network and an identifier (port number for IP based networks) for the local and/or remote computer is needed in addition to the local and/or remote routable address (the network address of the private network). When the remote computer is behind the private network and is assigned a new identifier, the connection will close and the local computer may be unable to quickly learn the new identifier needed to initiate a connection with the remote computer. This problem is exacerbated when the remote computer moves from one private network to the next while the requesting application is attempting to exchange data with the remote computer. In such a case, not only does the connection close with each move, it becomes very difficult for the local computer to quickly learn both the new network address and the identifier needed to initiate a new connection to the remote computer.
Likewise, when the local computer is behind the separate private network and is assigned a new identifier while the connection is open, the connection will subsequently close. Again, the problem is exacerbated when the local computer moves from one private network to the next while the requesting application is attempting to exchange data with the remote computer.
When both the remote computer and the local computer are located behind separate private networks, it is very difficult for the local computer to initiate a connection to the remote computer without the aid of a relay device.
Thus, there are many situations where the local computer is hindered from quickly, or in some cases completely prevented from, initiating a new connection to the remote computer. Additionally, in accordance with existing network protocols, many applications that fill the role of the requesting application are responsible for reestablishing the connection seamlessly without causing service interruptions. Unfortunately, many existing applications fail to do so, or they fail to do it elegantly.